The present invention relates to a microcontroller with a nonvolatile program memory, more particularly to a one-time-programmable microcontroller having features enabling program modifications to be made.
Microcontrollers, sometimes referred to as one-chip microcomputers, are used to control a wide range of electrical and mechanical appliances. Early microcontrollers included a central processing unit (CPU) and a mask-programmable read-only memory (ROM) storing the program executed by the CPU. The program contents were determined by the patterns on glass masks used in the fabrication process. Such microcontrollers could be produced inexpensively in large quantities, but their programs could not be modified after fabrication. If, as not infrequently happened, an application programmer found a bug in an application program after production had begun, the only way to fix the bug was to make a new set of glass masks and begin production again. This was a time-consuming process that was economically impractical for low-volume, high-diversity production.
To meet the need for easier program modification, microcontrollers with erasable programmable read-only memory (EPROM) were developed in the 1970s. EPROM is a type of nonvolatile memory in which the memory cells are transistors with floating gates. The individual transistors can be programmed by applying a high source-drain voltage, thereby injecting electrons into the floating gates. The entire memory can be erased by exposure to ultraviolet light, producing a photoelectric effect that enables electrons to escape from the floating gates. Enclosed in ceramic packages with quartz windows transparent to ultraviolet wavelengths, microcontrollers equipped with EPROM could be programmed, erased, and programmed again any number of times after fabrication, but the windowed ceramic packaging made these microcontrollers expensive.
A one-time-programmable (OTP) microcontroller includes EPROM but is enclosed in an inexpensive plastic package without a window. During the wafer fabrication and testing process, prior to dicing and packaging, the EPROM in an OTP microcontroller can be programmed and erased repeatedly. After packaging, since its EPROM cannot be erased, an OTP microcontroller can be programmed only once. OTP microcontrollers combine comparatively low cost with the ability to implement program changes promptly and easily, without changing the fabrication masks, so they have been used in a wide range of applications, including automobile cabin temperature control, computer keyboard control, motor control, and modem control, to name just a few.
Referring to FIG. 1, a conventional OTP microcontroller comprises a semiconductor chip 1 with an EPROM 2 for program storage and an EPROM programming circuit 3, which is coupled to a high-voltage terminal 4. The semiconductor chip 1 also includes a readable and writable random-access memory (RAM) 5 for storing data being processed, an internal bus 6, a CPU 7, and various other specialized modules (not visible). The high-voltage terminal 4 is normally held at the power-supply voltage VDD (e.g., five volts), but during programming of the EPROM 2, a higher programming voltage VPP (e.g., twelve volts) is applied, to create an electric field sufficient to inject electrons into floating gates by the tunnel effect. Incidentally, some conventional OTP microcontrollers can be brought into a test mode, for testing of the EPROM 2, by placing the high-voltage terminal 4 at the ground potential VSS (zero volts) during a reset.
One-time programmability means that once an OTP microcontroller has been packaged and programmed, new program code cannot be overwritten on existing program code. That is, the electrons injected into a floating gate by application of VPP during a programming operation are held in the floating gate essentially permanently, and cannot be removed by another programming operation. They can only be removed by exposure to ultraviolet light, which is not possible in a packaged device. This does not prevent new program code from being written later into non-programmed memory areas, but with conventional microcontrollers there would be no point in doing this, because the microcontroller would simply continue to execute its original program, and would ignore the new program code. The original program is normally stored in a continuous address area, and is self-contained, with no means for diverting execution into a new program area.
During application program development, there is no need to modify a program that has already been stored in the EPROM of an OTP microcontroller. The modified program can simply be written in its entirety into a new OTP microcontroller that has not yet been programmed. After program development has been completed and microcontrollers have been programmed or shipped in quantity, however, there may be an urgent need to modify part of the existing program code, to implement a program change requested by a customer, for example, or to fix a bug discovered in further tests or in the field. Since the program code in microcontrollers that have already been programmed cannot be modified, these microcontrollers must be discarded or replaced. When minor program bugs have to be fixed frequently in this way, the resulting economic cost can become intolerable.
A known method of circumventing this problem provides a microcontroller with on-chip ROM for storing application program code, external EPROM for storing modified program code, and on-chip RAM into which the modified program code can be loaded and executed. Japanese Unexamined Patent Application No. 2995030, for example, discloses a scheme in which the CPU sets a particular address in an interrupt control circuit; when program execution reaches this address, a CPU interrupt occurs, and an interrupt-handling routine writes the modified program code into the RAM. Because it requires an external EPROM to store the modified program code, however, this scheme is expensive and inconvenient and loses many of the advantages of an OTP microcontroller.
An object of the present invention is to provide a microcontroller that, after being programmed once, can be further programmed with additional program code, and can execute the additional program code in place of part of its original program.
According to one aspect of the invention, a microcontroller includes a nonvolatile memory, a disabled code detector, and a processing unit. The nonvolatile memory originally stores a first program and an interrupt-handling routine, and includes some free space. When part of the first program needs to be modified, this part is disabled, and a second program is stored in the free space. During execution of the first program by the processing unit, the disabled code detector detects the disabled part of the first program and generates an interrupt signal. The interrupt-handling routine then redirects execution to the second program, which is executed in place of the disabled part of the first program. The second program ends by returning to the first program.
Part of the first program can be disabled by changing one or more instructions of that part to a designated instruction, in which case the disabled code detector detects the instruction code of the designated instruction. Alternatively, part of the first program can be disabled by having the disabled code detector detect the address of the disabled part, in which case the address of the disabled part is stored in the non-volatile memory and loaded into the disabled code detector during an initialization process.
According to a second aspect of the invention, a microcontroller has a nonvolatile memory and a processing unit. The nonvolatile memory stores a main program, a plurality of subprograms, and an address list giving the address of each subprogram. The address list also includes spare addresses. When a subprogram needs to be modified, a modified program is additionally stored in the nonvolatile memory as an entire replacement for the subprogram, the address of the subprogram is marked as deleted in the address list, and the address of the modified program is stored in a spare address in the address list.
When the processing unit executes the main program, the addresses in the address list are used to redirect execution to the subprograms. If the address of a subprogram has been marked as deleted in the address list, execution is redirected to the relevant modified program instead.